const zh = {
  common: {
    save: '保存',
    cancel: '取消'
  },
  settings: {
    general: {
      title: '通用',
      language: '语言',
      environmentListUrl: '环境列表地址 URL'
    },
    tabs: {
      general: '通用',
      node: '节点',
      api: 'API',
      redis: 'Redis',
      other: '其他',
      framework: '框架'
    },
    node: {
      delay: '节点执行延迟 (ms)',
      timeout: '节点超时时间 (ms)',
      reportUrl: '节点上报地址 URL',
      pythonPath: 'Python 路径',
      pythonPathPlaceholder: '自定义 python 路径',
      delayPlaceholder: '请输入延迟（毫秒）',
      timeoutPlaceholder: '请输入超时时间（毫秒）',
      reportUrlPlaceholder: '请输入上报地址 URL'
    },
    api: {
      host: 'API 主机',
      port: 'API 端口',
      tokenEnabled: '是否启用 Token',
      token: 'Token 值',
      tokenPlaceholder: '请输入 Token（可为空）'
    },
    redis: {
      enabled: '是否启用 Redis',
      host: 'Redis 主机',
      port: 'Redis 端口',
      password: 'Redis 密码',
      passwordPlaceholder: '请输入密码（可为空）',
      db: 'Redis 数据库',
      testConnection: '测试连接',
      connectSuccess: 'Redis 连接测试成功！',
      readWriteSuccess: 'Redis 读写测试成功！',
      connectFailed: 'Redis 连接测试失败，请检查配置！',
      connectionTestFailed: 'Redis 连接测试失败',
      notes: '• 启用 Redis 后，应用将使用 Redis 进行缓存存储\n• 如果 Redis 连接失败，系统会自动使用内存缓存\n• 修改配置后需要重启应用才能生效\n• 建议在保存配置前先测试连接'
    },
    other: {
      noUi: '是否无 UI 启动'
    },
    framework: {
      path: '框架路径',
      pathPlaceholder: '请输入框架路径'
    }
  },
  common: {
    save: '保存',
    cancel: '取消',
    ok: '确定',
    on: '开启',
    off: '关闭',
    close: '关闭'
  },
  menubar: {
    project: '项目',
    new: '新建项目',
    open: '打开项目',
    close: '关闭项目',
    run: '运行',
    start: '开始运行',
    stop: '停止运行',
    debug: '调试模式',
    tools: '工具',
    settings: '设置',
    rostool: '话题管理',
    env: '环境管理',
    simulation: '仿真管理',
    maptool: '地图工具',
    installExt: '安装扩展',
    help: '帮助',
    documentation: '文档',
    about: '关于',
    docOpenTitle: '打开文档',
    docOpenContent: '是否在浏览器中打开文档？'
  },
  layout: {
    versionWarning: '检测到系统版本非推荐版本，建议使用{version}'
  },
  projectExplorer: {
    confirmDeleteTitle: '确认删除',
    confirmDeleteContent: '确定要删除 "{name}" 吗？',
    confirmRenameTitle: '确认重命名',
    confirmRenameContent: '确定要重命名 "{name}" 吗？',
    deleteSuccess: '删除成功',
    newItemFile: '文件',
    newItemFolder: '文件夹',
    newItemPlaceholderFile: '新建文件',
    newItemPlaceholderFolder: '新建文件夹',
    renameSuccess: '重命名成功',
    createFileSuccess: '新建文件成功',
    createFolderSuccess: '新建文件夹成功',
    openInExplorer: '在资源管理器中打开',
    contextNewFile: '新建文件',
    contextNewFolder: '新建文件夹',
    contextRename: '重命名',
    contextDelete: '删除'
  },
  simulationManager: {
    title: '仿真管理',
    fetchListFailed: '获取仿真平台列表失败',
    selectDirTitle: '选择下载目录',
    downloading: '正在下载...',
    downloadProgress: '正在下载...{progress}%',
    installDone: '安装完成',
    installFailed: '安装失败: {msg}',
    manualSetDone: '已记录启动脚本，标记为已安装',
    selectFileFailed: '选择文件失败',
    confirmStopTitle: '确认停止下载',
    confirmStopContent: '当前下载进度仍在进行中，是否中断下载？',
    stopped: '下载已停止',
    stopFailed: '停止下载失败',
    settings: '设置',
    simulation: '仿真',
    control: '控制',
    manualInstall: '我已安装',
    stop: '停止',
    install: '安装',
    version: '版本',
    startSuccess: '{name} 启动成功',
    startFailed: '{name} 启动失败: {msg}',
    controlStarted: '{name} 控制脚本已启动',
    controlFailed: '{name} 控制失败: {msg}',
    tfGenerating: '正在生成TF树...',
    pdfOpenFailed: '无法打开PDF文件',
    tfOpened: 'TF树已生成并打开',
    tfPdfNotFound: '未找到生成的PDF文件',
    tfFailed: '生成TF树失败',
    viewTfFailed: '查看TF失败: {msg}',
    rqtStartFailed: '启动rqt失败，请确保已安装ROS和rqt',
    rqtStarted: 'rqt启动成功',
    rvizStartFailed: '启动rviz失败，请确保已安装ROS和rviz',
    rvizStarted: 'rviz启动成功'
  },
  envManager: {
    title: '环境管理',
    fetchFailed: '获取环境列表失败',
    getLatest: '获取最新',
    refreshStatus: '刷新状态',
    current: '当前',
    recommended: '推荐',
    version: '版本',
    installed: '已安装',
    notInstalled: '未安装',
    install: '安装'
  }
  ,
  welcome: {
    title: '欢迎使用 FutureDrive',
    subtitle: '连接 · 控制 · 调试 · 可视，一站式自动驾驶流程化解决方案',
    openProject: '打开项目',
    newProject: '新建项目',
    recentTitle: '最近打开的项目',
    clearRecent: '清空最近项目列表',
    noRecent: '暂无最近项目',
    company: '安徽灵元机器人科技有限公司'
  },
  about: {
    modalTitle: '关于 FutureDrive',
    productTitle: 'FutureDrive 自动驾驶',
    versionFree: '版本 {version} 免费版',
    checkUpdate: '检查更新',
    teamLabel: '开发团队：',
    teamValue: 'FutureDrive 自动驾驶团队',
    companyLabel: '公司：',
    companyValue: '安徽灵元机器人科技有限公司',
    contactLabel: '联系方式：',
    contactValue: 'xautomove@foxmail.com',
    license: '许可协议',
    licenseTip: '点击查看许可协议',
    legal: '法律免责声明',
    legalTip: '点击查看法律声明',
    downloading: '正在下载...',
    downloadProgress: '下载进度：{percent}%',
    downloadDone: '下载完成',
    downloadFailed: '下载失败: {msg}',
    checkingUpdate: '正在检查更新...',
    noReleaseInfo: '未找到可用的版本信息',
    isLatest: '当前已是最新版本',
    noInstaller: '未找到可用的安装包',
    newVersionTitle: '发现新版本',
    newVersionContent: '检测到新版本 v{version}，是否下载更新？',
    download: '下载',
    cancel: '取消',
    checkFailed: '检查更新失败: {msg}'
  },
  rostopic: {
    modalTitle: '话题管理',
    refreshTitle: '刷新话题列表',
    recordTitle: '录制',
    playbackTitle: '回放ROS包',
    restartTitle: '重启ROS',
    restartDesc: '这将结束所有ROS节点并重启Daemon，确定要继续吗？',
    restartBtnTitle: '一键重启ROS',
    searchPlaceholder: '搜索话题...',
    savePathPlaceholder: '保存路径，如 /tmp/rosbag',
    recordConfirm: '确认录制',
    recordingStarting: '正在启动录制...',
    recordStop: '停止录制',
    cancel: '取消',
    fetchFailed: '获取话题列表失败: {msg}',
    copySuccess: '话题名称已复制到剪贴板',
    copyFailed: '复制失败',
    choosePathWarn: '请选择保存路径',
    chooseTopicWarn: '请至少选择一个话题',
    recordingStarted: '录制已开始',
    fileExists: '文件已经存在：{path}',
    fileExistsGeneric: '文件已经存在',
    recordStartFailed: '录制启动失败: {msg}',
    selectDirFailed: '选择目录失败：{msg}',
    daemonStartFailed: '启动daemon失败: {msg}',
    restartSuccess: '重启ROS成功',
    restartFailed: '重启ROS失败: {msg}',
    stopRecordFailed: '停止录制失败',
    contextView: '查看',
    contextCopy: '复制'
  },
  rosbag: {
    selectFileFail: '选择文件失败：{msg}',
    getInfoFail: '获取包信息失败：{msg}',
    mustChooseFile: '请先选择ROS包文件',
    playDone: 'ROS包播放完成',
    playStart: '开始回放ROS包',
    playStartFail: '启动回放失败：{msg}',
    playStopped: '回放已停止',
    playStopFail: '停止回放失败：{msg}',
    pathPlaceholder: '选择ROS包文件',
    chooseFile: '选择文件',
    loadingInfo: '正在获取包信息...',
    labelFiles: '文件：',
    labelSize: '大小：',
    labelDuration: '时长：',
    labelStart: '开始：',
    labelEnd: '结束：',
    labelMessages: '消息数：',
    labelTopicInfo: '话题信息：',
    play: '播放',
    stop: '停止'
  },
  projectModal: {
    title: '新建项目',
    name: '项目名称',
    nameRequired: '请输入项目名称',
    namePattern: '项目名称只能包含字母、数字、下划线和连字符',
    description: '项目描述',
    descriptionPlaceholder: '请输入项目描述',
    saveLocation: '项目保存位置',
    chooseSaveLocation: '请选择项目保存位置',
    browse: '浏览',
    cancel: '取消',
    create: '创建项目',
    dirExists: '项目目录已存在',
    createSuccess: '项目创建成功',
    openFailed: '打开项目失败',
    fillNameWarn: '请先填写项目名称',
    selectDirFail: '选择目录失败',
    createFail: '项目创建失败'
  }
  ,
  fileEditor: {
    saveBtn: '保存 (Ctrl+S)',
    saveSuccess: '保存成功',
    saveFailed: '保存失败: {msg}'
  },
  debugConsole: {
    title: '输出控制台',
    searchPlaceholder: '搜索日志...',
    scrollLockOn: '取消锁定滚动',
    scrollLockOff: '锁定滚动',
    clear: '清除',
    filter: '筛选',
    filterAll: '全部',
    filterInfo: '信息',
    filterWarning: '警告',
    filterError: '错误',
    copySuccess: '日志已复制到剪贴板',
    copyFailed: '复制失败',
    exportAll: '导出所有日志'
  },
  simulationSettings: {
    title: '仿真设置 - {platform}',
    host: 'Host',
    port: 'Port',
    map: 'Map',
    launchFile: '启动文件',
    chooseFile: '选择文件',
    chooseFileTitle: '选择启动文件',
    chooseFilePlaceholder: '请选择py或sh文件',
    chooseFileOptionalPlaceholder: '请选择py或sh文件（可选）',
    onlyPySh: '只允许py或sh文件',
    launchArgs: '启动参数',
    launchArgsPlaceholder: '可选，追加到命令行，如 --foo bar',
    uninstall: '卸载',
    pluginDir: '插件目录',
    cancel: '取消',
    save: '保存',
    validateHost: '请输入Host',
    validatePort: '请输入Port',
    validateMap: '请输入Map',
    validateChooseFile: '请选择启动文件'
  }
  ,
  templateManager: {
    title: '模板管理',
    market: '市场',
    importTemplate: '导入模板',
    loadFailed: '加载模板列表失败',
    applied: '已应用模板: {name}',
    applyFailed: '应用模板失败: {msg}',
    fileExistsTitle: '文件已存在',
    fileExistsContent: '模板 "{name}" 已存在，是否覆盖？',
    overwrite: '覆盖',
    cancel: '取消',
    importFailedX: '导入模板失败: {msg}',
    importSuccess: '模板导入成功',
    apply: '应用'
  },
  mapEditor: {
    importPCD: '导入PCD文件',
    drawLine: '画线工具',
    drawPolygon: '画多边形工具',
    addPoint: '添加点工具',
    deleteTool: '删除工具',
    undoTool: '撤销工具',
    choosePCDTitle: '选择PCD文件',
    pcdFilterName: 'PCD文件',
    fileImportFailed: '文件导入失败',
    importPCDFailed: '导入PCD文件失败: {msg}',
    invalidPointCloud: '点云数据格式不正确',
    noPointsAfterFilter: '过滤后没有可用的点云数据',
    loadSuccess: '点云文件加载成功',
    loadFailed: '点云文件加载失败',
    drawFailed: '绘制失败：canvas 或 camera 不存在',
    layersTitle: '图层列表',
    propertiesTitle: '属性面板',
    id: 'ID',
    type: '类型',
    lane: '车道线',
    park: '停车区',
    junction: '路口',
    speedLimit: '限速',
    direction: '方向',
    forward: '正向',
    backward: '反向',
    both: '双向'
  },
  hardwareManager: {
    addDevice: '添加硬件',
    editDevice: '编辑硬件',
    okAdd: '添加硬件',
    okSave: '保存',
    cancel: '取消',
    tabSensor: '传感器',
    tabOther: '其他',
    name: '硬件名称',
    nameRequired: '请输入硬件名称',
    model: '硬件型号',
    modelRequired: '请选择硬件型号',
    modelPlaceholder: '请选择硬件型号',
    modelOther: '其他',
    topic: '话题',
    enabled: '启用',
    remark: '备注',
    driverScript: '驱动脚本',
    selectDir: '选择目录',
    selectDirPlaceholder: '请选择目录',
    listRoot: '硬件列表',
    listSensors: '传感器',
    listOthers: '其他硬件',
    confirmDelete: '确认删除',
    confirmDeleteContent: '确定要删除硬件 "{name}" 吗？',
    ok: '确定',
    needOpenProject: '需要先打开项目',
    deleteSuccess: '删除成功',
    deleteFailed: '删除硬件失败',
    initFailed: '初始化硬件配置失败',
    addSuccess: '硬件添加成功！',
    updateSuccess: '硬件更新成功！',
    addUpdateFailed: '{mode}硬件失败: {msg}'
  },
  topicEcho: {
    title: '话题: {topic}',
    modeEcho: '输出',
    modeDelay: '延迟',
    modeHz: '频率',
    modeInfo: '信息',
    modeType: '类型',
    filterPlaceholder: '过滤内容...',
    autoScroll: '自动更新',
    export: '导出',
    exportSuccess: '导出成功',
    fetchFailed: '获取数据失败'
  }
  ,
  nodeConfig: {
    modalTitle: '节点配置 - {label}',
    selectFileTitle: '选择{name}文件',
    fileFilterAll: '所有文件',
    filePlaceholder: '请选择文件...',
    chooseFile: '选择文件'
  },
  nodeList: {
    title: '可用节点列表',
    tabAll: '全部',
    openDir: '打开节点目录',
    refresh: '刷新节点列表',
    market: '市场',
    searchPlaceholder: '搜索节点...',
    add: '添加',
    refreshSuccess: '节点列表刷新成功',
    refreshFailed: '节点列表刷新失败'
  },
  main: {
    initializing: '正在初始化...',
    runStopped: '流程已强制停止',
    runStopFailed: '停止流程失败：{msg}',
    enableRedisWarn: '请先在设置中启用 Redis 缓存功能',
    noExecutable: '没有可执行的节点',
    startFlow: '开始执行流程...',
    runFailed: '流程执行失败',
    copied: '节点已复制',
    pasted: '节点已粘贴',
    noPasteNode: '没有可粘贴的节点',
    setPriority: '设置优先级',
    priorityHint: '请输入优先级 (数字越大优先级越高):',
    invalidNumber: '请输入有效的数字',
    toolbar: {
      expanding: '展开工具栏',
      collapsing: '收起工具栏',
      starting: '正在启动...',
      stop: '停止运行',
      run: '运行流程',
      templates: '模板管理',
      templateManager: '模板管理',
      exportTpl: '导出模板',
      exportTemplate: '导出模板',
      autoLayout: '自动排版',
      clearCanvas: '清空画布',
      addNode: '添加节点'
    },
    export: {
      cannot: '无法导出模板',
      cannotDesc: '当前画布中没有节点，请先添加节点后再导出。',
      ok: '确定',
      title: '导出模板',
      inputName: '请输入模板名称：',
      inputPlaceholder: '请输入模板名称',
      cancel: '取消',
      exists: '文件已存在',
      existsDesc: '模板 "{name}" 已存在，是否覆盖？',
      overwrite: '覆盖',
      successTitle: '导出成功',
      successDesc: '模板已成功导出。',
      failedTitle: '导出失败',
      failedDesc: '导出模板时发生错误：{msg}'
    },
    exportTemplate: {
      cannotExportTitle: '无法导出模板',
      noNodesWarning: '画布上没有节点，请先添加节点',
      exportTitle: '导出模板',
      inputTemplateName: '请输入模板名称：',
      templateNamePlaceholder: '请输入模板名称',
      templateNameRequired: '请输入模板名称',
      exportSuccess: '模板导出成功',
      exportFailed: '导出模板失败：{msg}',
      fileExists: '文件已存在',
      fileExistsDesc: '模板 "{name}" 已存在，是否覆盖？'
    },
    bgExitTitle: '退出后台进程',
    bgExitContent: '是否要退出后台进程？',
    logs: {
      killedPg: '已终止后台进程组 (PGID: {pgid})',
      killedPid: '已终止后台进程 (PID: {pid})',
      notFoundRunningPgids: '未找到正在运行的后台进程PID',
      notFoundPid: '未找到后台进程PID',
      bgKillError: '终止后台进程时出错: {msg}',
      openConfig: '打开配置: {id}',
      addNode: '添加节点: {name}',
      addTaskNode: '添加任务节点: {name}',
      connectTypeMismatch: '连接失败: 类型不匹配 ({src} -> {dst})',
      guiInitFailed: 'GUI初始化失败: {msg}',
      flowStopped: '流程已停止',
      stopFlowError: '停止流程失败',
      noNodesToRun: '没有可执行的节点',
      flowStarting: '开始执行流程...',
      flowExecutionError: '流程执行失败',
      guiInitError: 'GUI初始化失败',
      connectionFailedTypeMismatch: '连接失败: 类型不匹配'
    },
    clear: {
      title: '清空画布',
      content: '确定要清空当前画布吗？此操作不可恢复。'
    },
    autoLayoutTitle: '自动排版',
    autoLayoutContent: '是否对当前画布应用自动排版？',
    clearCanvasTitle: '清空画布',
    clearCanvasContent: '确定要清空当前画布吗？此操作不可恢复。',
    nodeInfoTitle: '节点介绍',
    noneIntro: '无介绍',
    menu: {
      add: '添加节点',
      copy: '复制节点',
      paste: '粘贴节点',
      delete: '删除节点',
      priority: '设置优先级',
      info: '查看介绍',
      viewLog: '查看运行记录'
    },
    nodeToolbar: {
      settings: '设置',
      setColor: '设置颜色',
      deleteNode: '删除节点',
      bgRunningTip: '后台进程运行中，点击可退出',
      addNode: '添加节点',
      copyNode: '复制节点',
      pasteNode: '粘贴节点',
      setPriority: '设置优先级',
      viewInfo: '查看介绍',
      viewLog: '查看运行记录',
      nodeInfo: '节点介绍',
      nodeCopied: '节点已复制',
      nodePasted: '节点已粘贴',
      noNodeToPaste: '没有可粘贴的节点'
    }
  },
  nodeLog: {
    title: '节点运行日志',
    empty: '暂无该节点运行记录',
    close: '关闭',
    tabs: {
      status: '运行状态',
      input: '输入信息',
      output: '输出信息',
      config: '用户配置',
      debug: '调试信息'
    },
    copySuccess: '复制成功',
    copyFailed: '复制失败',
    copyStatusTitle: '复制状态信息',
    status: '状态:',
    statusCompleted: '已完成',
    statusError: '执行错误',
    statusUnknown: '未知状态',
    startTime: '开始时间:',
    endTime: '结束时间:',
    duration: '运行时长:',
    nodeName: '节点名称:',
    uuid: 'UUID:',
    recordTime: '记录时间:',
    none: '无'
  },
  installExt: {
    title: '安装扩展',
    inputPlaceholder: '请输入安装指令',
    select: {
      node: '节点',
      template: '模板',
      plugin: '插件',
      driver: '驱动'
    },
    install: '安装',
    market: '市场',
    openMarket: '打开扩展市场',
    logTitle: '执行日志：'
  }
};

export default zh;


